package com.cyys.modules.config;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.cyys.modules.interceptor.CyysDefaultDatascopeHandle;
import com.cyys.modules.interceptor.DataScopeHandle;
import com.cyys.modules.interceptor.DataScopeInterceptor;
import com.cyys.modules.interceptor.DataScopeSqlInjector;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "com.cyys.modules.*.dao*")
public class MybatisPlusConfig {

    /**
     * cyys 默认数据权限处理器
     * @return CyysDefaultDatascopeHandle
     */
    @Bean
    @ConditionalOnMissingBean
//    @ConditionalOnClass(User.class)
    public DataScopeHandle dataScopeHandle() {
        return new CyysDefaultDatascopeHandle();
    }
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,
     * 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 数据权限
        DataScopeInterceptor dataScopeInnerInterceptor = new DataScopeInterceptor();
        dataScopeInnerInterceptor.setDataScopeHandle(dataScopeHandle());
        interceptor.addInnerInterceptor(dataScopeInnerInterceptor);
        // 分页支持
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        paginationInnerInterceptor.setMaxLimit(1000L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;

//
//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//
//        // 数据权限
//        DataScopeInterceptor dataScopeInterceptor = new DataScopeInterceptor();
//        dataScopeInterceptor.setDataScopeHandle(dataScopeHandle());
//        interceptor.addInnerInterceptor(dataScopeInterceptor);
//        return interceptor;
    }



    /**
     * 扩展 mybatis-plus baseMapper 支持数据权限
     * @return
     */
    @Bean
    @ConditionalOnBean(DataScopeHandle.class)
    public DataScopeSqlInjector dataScopeSqlInjector() {
        return new DataScopeSqlInjector();
    }
}
